/* This is a generated file */
#ifndef __hx509_private_h__
#define __hx509_private_h__

#include <stdarg.h>

#ifndef HEIMDAL_NORETURN_ATTRIBUTE
#if defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 1 )))
#define HEIMDAL_NORETURN_ATTRIBUTE __attribute__((noreturn))
#else
#define HEIMDAL_NORETURN_ATTRIBUTE
#endif
#endif

#ifndef HEIMDAL_PRINTF_ATTRIBUTE
#if defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 1 )))
#define HEIMDAL_PRINTF_ATTRIBUTE(x) __attribute__((format x))
#else
#define HEIMDAL_PRINTF_ATTRIBUTE(x)
#endif
#endif

int
_hx509_AlgorithmIdentifier_cmp (
	const AlgorithmIdentifier *p,
	const AlgorithmIdentifier *q);

int
_hx509_Certificate_cmp (
	const Certificate *p,
	const Certificate *q);

int
_hx509_Name_to_string (
	const Name *n,
	char **str);

time_t
_hx509_Time2time_t (const Time *t);

void
_hx509_abort (
	const char *fmt,
	...) HEIMDAL_NORETURN_ATTRIBUTE 
     HEIMDAL_PRINTF_ATTRIBUTE((printf, 1, 2));

int
_hx509_calculate_path (
	hx509_context context,
	int flags,
	time_t time_now,
	hx509_certs anchors,
	unsigned int max_depth,
	hx509_cert cert,
	hx509_certs pool,
	hx509_path *path);

int
_hx509_cert_get_eku (
	hx509_context context,
	hx509_cert cert,
	ExtKeyUsage *e);

int
_hx509_cert_get_keyusage (
	hx509_context context,
	hx509_cert c,
	KeyUsage *ku);

int
_hx509_cert_get_version (const Certificate *t);

int
_hx509_cert_is_parent_cmp (
	const Certificate *subject,
	const Certificate *issuer,
	int allow_self_signed);

int
_hx509_cert_private_decrypt (
	hx509_context context,
	const heim_octet_string *ciphertext,
	const heim_oid *encryption_oid,
	hx509_cert p,
	heim_octet_string *cleartext);

hx509_private_key
_hx509_cert_private_key (hx509_cert p);

int
_hx509_cert_private_key_exportable (hx509_cert p);

int
_hx509_cert_set_key (
	hx509_cert cert,
	hx509_private_key private_key);

void
_hx509_cert_set_release (
	hx509_cert cert,
	_hx509_cert_release_func release,
	void *ctx);

int
_hx509_cert_to_env (
	hx509_context context,
	hx509_cert cert,
	hx509_env *env);

int
_hx509_certs_keys_add (
	hx509_context context,
	hx509_certs certs,
	hx509_private_key key);

void
_hx509_certs_keys_free (
	hx509_context context,
	hx509_private_key *keys);

int
_hx509_certs_keys_get (
	hx509_context context,
	hx509_certs certs,
	hx509_private_key **keys);

int
_hx509_check_key_usage (
	hx509_context context,
	hx509_cert cert,
	unsigned flags,
	int req_present);

int
_hx509_collector_alloc (
	hx509_context context,
	hx509_lock lock,
	struct hx509_collector **collector);

int
_hx509_collector_certs_add (
	hx509_context context,
	struct hx509_collector *c,
	hx509_cert cert);

int
_hx509_collector_collect_certs (
	hx509_context context,
	struct hx509_collector *c,
	hx509_certs *ret_certs);

int
_hx509_collector_collect_private_keys (
	hx509_context context,
	struct hx509_collector *c,
	hx509_private_key **keys);

void
_hx509_collector_free (struct hx509_collector *c);

hx509_lock
_hx509_collector_get_lock (struct hx509_collector *c);

int
_hx509_collector_private_key_add (
	hx509_context context,
	struct hx509_collector *c,
	const AlgorithmIdentifier *alg,
	hx509_private_key private_key,
	const heim_octet_string *key_data,
	const heim_octet_string *localKeyId);

int
_hx509_create_signature (
	hx509_context context,
	const hx509_private_key signer,
	const AlgorithmIdentifier *alg,
	const heim_octet_string *data,
	AlgorithmIdentifier *signatureAlgorithm,
	heim_octet_string *sig);

int
_hx509_create_signature_bitstring (
	hx509_context context,
	const hx509_private_key signer,
	const AlgorithmIdentifier *alg,
	const heim_octet_string *data,
	AlgorithmIdentifier *signatureAlgorithm,
	heim_bit_string *sig);

hx509_evaluate
_hx509_evaluate_alloc (void);

int
_hx509_expr_eval (
	hx509_context context,
	hx509_env env,
	struct hx_expr *expr);

void
_hx509_expr_free (struct hx_expr *expr);

struct hx_expr *
_hx509_expr_parse (const char *buf);

int
_hx509_find_extension_subject_key_id (
	const Certificate *issuer,
	SubjectKeyIdentifier *si);

int
_hx509_generate_private_key (
	hx509_context context,
	struct hx509_generate_private_context *ctx,
	hx509_private_key *private_key);

int
_hx509_generate_private_key_bits (
	hx509_context context,
	struct hx509_generate_private_context *ctx,
	unsigned long bits);

void
_hx509_generate_private_key_free (struct hx509_generate_private_context **ctx);

int
_hx509_generate_private_key_init (
	hx509_context context,
	const heim_oid *oid,
	struct hx509_generate_private_context **ctx);

int
_hx509_generate_private_key_is_ca (
	hx509_context context,
	struct hx509_generate_private_context *ctx);

Certificate *
_hx509_get_cert (hx509_cert cert);

BIGNUM *
_hx509_int2BN (const heim_integer *i);

void
_hx509_ks_dir_register (hx509_context context);

void
_hx509_ks_file_register (hx509_context context);

void
_hx509_ks_keychain_register (hx509_context context);

void
_hx509_ks_mem_register (hx509_context context);

void
_hx509_ks_null_register (hx509_context context);

void
_hx509_ks_pkcs11_register (hx509_context context);

void
_hx509_ks_pkcs12_register (hx509_context context);

void
_hx509_ks_register (
	hx509_context context,
	struct hx509_keyset_ops *ops);

int
_hx509_lock_find_cert (
	hx509_lock lock,
	const hx509_query *q,
	hx509_cert *c);

const struct _hx509_password *
_hx509_lock_get_passwords (hx509_lock lock);

hx509_certs
_hx509_lock_unlock_certs (hx509_lock lock);

int
_hx509_map_file_os (
	const char *fn,
	heim_octet_string *os);

int
_hx509_match_keys (
	hx509_cert c,
	hx509_private_key key);

int
_hx509_name_cmp (
	const Name *n1,
	const Name *n2,
	int *c);

int
_hx509_name_ds_cmp (
	const DirectoryString *ds1,
	const DirectoryString *ds2,
	int *diff);

int
_hx509_name_modify (
	hx509_context context,
	Name *name,
	int append,
	const heim_oid *oid,
	const char *str);

int
_hx509_path_append (
	hx509_context context,
	hx509_path *path,
	hx509_cert cert);

void
_hx509_path_free (hx509_path *path);

int
_hx509_pbe_decrypt (
	hx509_context context,
	hx509_lock lock,
	const AlgorithmIdentifier *ai,
	const heim_octet_string *econtent,
	heim_octet_string *content);

int
_hx509_pbe_encrypt (
	hx509_context context,
	hx509_lock lock,
	const AlgorithmIdentifier *ai,
	const heim_octet_string *content,
	heim_octet_string *econtent);

void
_hx509_pi_printf (
	int (*func)(void *, const char *),
	void *ctx,
	const char *fmt,
	...)
     HEIMDAL_PRINTF_ATTRIBUTE((printf, 3, 4));

int
_hx509_private_key_export (
	hx509_context context,
	const hx509_private_key key,
	hx509_key_format_t format,
	heim_octet_string *data);

int
_hx509_private_key_exportable (hx509_private_key key);

BIGNUM *
_hx509_private_key_get_internal (
	hx509_context context,
	hx509_private_key key,
	const char *type);

int
_hx509_private_key_oid (
	hx509_context context,
	const hx509_private_key key,
	heim_oid *data);

hx509_private_key
_hx509_private_key_ref (hx509_private_key key);

const char *
_hx509_private_pem_name (hx509_private_key key);

int
_hx509_public_encrypt (
	hx509_context context,
	const heim_octet_string *cleartext,
	const Certificate *cert,
	heim_oid *encryption_oid,
	heim_octet_string *ciphertext);

void
_hx509_query_clear (hx509_query *q);

int
_hx509_query_match_cert (
	hx509_context context,
	const hx509_query *q,
	hx509_cert cert);

int
_hx509_request_add_dns_name (
	hx509_context context,
	hx509_request req,
	const char *hostname);

int
_hx509_request_add_eku (
	hx509_context context,
	hx509_request req,
	const heim_oid *oid);

int
_hx509_request_add_email (
	hx509_context context,
	hx509_request req,
	const char *email);

int
_hx509_request_parse (
	hx509_context context,
	const char *path,
	hx509_request *req);

int
_hx509_request_print (
	hx509_context context,
	hx509_request req,
	FILE *f);

int
_hx509_request_to_pkcs10 (
	hx509_context context,
	const hx509_request req,
	const hx509_private_key signer,
	heim_octet_string *request);

hx509_revoke_ctx
_hx509_revoke_ref (hx509_revoke_ctx ctx);

void
_hx509_sel_yyerror (const char *s);

int
_hx509_self_signed_valid (
	hx509_context context,
	const AlgorithmIdentifier *alg);

int
_hx509_set_cert_attribute (
	hx509_context context,
	hx509_cert cert,
	const heim_oid *oid,
	const heim_octet_string *attr);

int
_hx509_signature_best_before (
	hx509_context context,
	const AlgorithmIdentifier *alg,
	time_t t);

void
_hx509_unmap_file_os (heim_octet_string *os);

int
_hx509_unparse_Name (
	const Name *aname,
	char **str);

time_t
_hx509_verify_get_time (hx509_verify_ctx ctx);

int
_hx509_verify_signature (
	hx509_context context,
	const hx509_cert cert,
	const AlgorithmIdentifier *alg,
	const heim_octet_string *data,
	const heim_octet_string *sig);

int
_hx509_verify_signature_bitstring (
	hx509_context context,
	const hx509_cert signer,
	const AlgorithmIdentifier *alg,
	const heim_octet_string *data,
	const heim_bit_string *sig);

int
_hx509_write_file (
	const char *fn,
	const void *data,
	size_t length);

#endif /* __hx509_private_h__ */
